前面講這麼多東西,也該來做點事情了。
umount Data0/
umount: /media/Data0: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
這個訊息應該夠令人火大了吧,我就想閃人了結果硬碟退不掉。大部分的人應該會直接照他的建議執行下面的指令:
lsof
接著他應該會決得很幹,沒錯因為有一大票的錯誤訊息,大概捲了數十秒後,內心會想:我下這個指令幹麻,還浪費我三秒鐘看一大堆訊息從前面閃過。
是的,直接把所有開啟中的檔案叫出來真的沒啥意義,不過還記得我們講過 stdout 與 grep 吧?
lsof | grep Data0
smbd 114212 root cwd DIR 8,17 4096 2 /media/Data0
smbd 114212 root 38r DIR 8,17 4096 2 /media/Data0
很好哪個網路芳鄰使用者正在看我的檔案,拖出去斬了!!
但是如果 Process 很多,手動砍又有點不切實際,所以這時候我們可以先用 sed
指令把多個空白全部換成一個空白,像這樣:
lsof | grep Data0 | sed "s/\ \ */\ /g"
smbd 114212 root cwd DIR 8,17 4096 2 /media/Data0
smbd 114212 root 38r DIR 8,17 4096 2 /media/Data0
恩,這資料看起來有點邏輯了,用空白分隔,第一欄是程序名稱,第二欄是 pid ,那接著取出 pid 吧,有個好用的指令叫做 cut
,用法如下:
cut -d '分隔字元' -f 第幾欄
再把上面的指令接起來:
lsof | grep Data0 | sed "s/\ \ */\ /g" | cut -d ' ' -f 2
114212
114212
最後再用 for 迴圈把整個包起來:
for pid in `lsof | grep Data0 | sed "s/\ \ */\ /g" | cut -d ' ' -f 2`; do
kill $pid
done
搞定收工。蛤你說搞不定?
for pid in `lsof | grep Data0 | sed "s/\ \ */\ /g" | cut -d ' ' -f 2`; do
kill -9 $pid
done
我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。